⭐ Source/TopDownShooter/
│
+-- TopDownCharacter (.h/.cpp)
 │   +-- UPROPERTY: MoveSpeed, FireRate, MaxHealth
 │   +-- Tick(): aim at mouse, fire timer
 │   +-- Enhanced Input: IA_Move, IA_Shoot, IA_Dash
 │   +-- AddMovementInput() ? CharacterMovement
 │   +-- Dash() + ActivateShield() abilities
│
+-- Bullet (.h/.cpp)
 │   +-- UProjectileMovementComponent
 │   +-- OnComponentBeginOverlap ? OnHit()
 │   +-- InitialLifeSpan = 2s (auto-destroy)
│
+-- Enemy (.h/.cpp)
 │   +-- UENUM EEnemyType: Grunt/Runner/Tank/Shooter
 │   +-- TakeDamage() override
 │   +-- UFUNCTION BlueprintImplementableEvent OnDeath
│
+-- EnemyAIController (.h/.cpp)
 │   +-- MoveToActor() with NavMesh pathfinding
│
+-- WaveSpawner (.h/.cpp)
 │   +-- FTimerHandle, repeating wave timer
 │   +-- USTRUCT FWaveConfig, data-driven waves
 │   +-- TSubclassOf array of types
│
+-- TopDownGameMode (.h/.cpp)
 │   +-- DefaultPawnClass, PlayerControllerClass
 │   +-- PlayerDied() ? RestartPlayer()
│
+-- TopDownHUD (.h/.cpp)  [UUserWidget]
    +-- BindWidget: ScoreText, HealthBar, WaveText
    +-- UpdateHealth(), UpdateScore(), UpdateWave()